package leetcode.sword;

import java.util.Arrays;

public class Solution45 {

    public static void main(String[] args) {
        Solution45 s = new Solution45();
        int[] nums = {3,30,34,5,9};
        System.out.println(s.minNumber(nums));
    }

    public String minNumber(int[] nums) {
        //对两个字符串a,b自定义比较器
        //规则：从前向后按元素比较，元素越小越靠前；若比较到a的末尾了，发现b还有，继续从a的头开始按元素比；
        //若比较到b末尾仍无法区分，说明b是a的重复，此时a，b谁在前都无所谓
//        Comparator<String> comparator = new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                //为了方便，假设o1长度不大于o2，但是在返回时要知道是否发生了交换
//                //所以用hasSwap作为标记
//                boolean hasSwap = false;
//                boolean smaller = false;
//                if(o1.length()>o2.length()){
//                    String tmp = o1;
//                    o1 = o2;
//                    o2 = tmp;
//                    hasSwap = true;
//                }
//                int i = 0, j = 0;
//                while (j<o2.length()){
//                    i = i % o1.length(); //o1到末尾了还没比较出来则从头开始
//                    if(o1.charAt(i)>o2.charAt(j)){
//                        smaller = false;
//                        break;
//                    }else if(o1.charAt(i)<o2.charAt(j)){
//                        smaller = true;
//                        break;
//                    }else {
//                        i++;
//                        j++;
//                    }
//                }
//                //o2到末尾了
//                if(i==o1.length()) return 1; //o2只是o1的简单重复，无所谓谁在前
//
//                return smaller^hasSwap?-1:1;
//            }
//        };

        //利用treeset有序的特点,存放按自定义排序后的字符串（从整数值转来）
//        TreeSet<String> treeSet = new TreeSet<>(comparator);
//        for (int num:nums) {
//            treeSet.add(String.valueOf(num));
//        }

        String[] ss = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            ss[i] = String.valueOf(nums[i]);
        }

        Arrays.sort(ss,(String x, String y) -> (x + y).compareTo(y + x));

        StringBuilder sb = new StringBuilder();
        for (String string: ss) {
            sb.append(string);
        }
        return sb.toString();
    }
}
